package com.xncoding.stream;

import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;

public class FunctionalInterfaceTest {
    @Test
    public  void test() {
        // 使用 Lambda 表达式创建 MyFunctionalInterface 的实例
        MyFunctionalInterface myFunctionalInterface = () -> System.out.println("Hello, Functional Interface!");
        // 调用接口的抽象方法
        myFunctionalInterface.myMethod();
    }

    @Test
    public  void test01() {
        // 使用 lambda 表达式实现加法
        Calculator addition = (a, b) -> a + b;
        System.out.println("3 + 5 = " + addition.calculate(3, 5)); // 输出 8

        // 使用 lambda 表达式实现减法
        Calculator subtraction = (a, b) -> a - b;
        System.out.println("7 - 2 = " + subtraction.calculate(7, 2)); // 输出 5

        // 使用 lambda 表达式实现乘法
        Calculator multiplication = (a, b) -> a * b;
        System.out.println("4 * 6 = " + multiplication.calculate(4, 6)); // 输出 24
    }

    @Test
    public  void test02() {
        List<String> names = Arrays.asList("John", "Doe", "Jane", "Smith", "Alice");

        // 使用 Predicate 过滤出长度大于等于4的字符串
        Predicate<String> filterPredicate = str -> str.length() >= 4;

        // 使用 Function 将字符串转换为大写
        Function<String, String> toUpperCaseFunction = String::toUpperCase;

        // 使用 Consumer 输出字符串
        Consumer<String> printConsumer = System.out::println;

        // 结合 Predicate、Function 和 Consumer 进行数据处理和输出
        names.stream()
                .filter(filterPredicate)
                .map(toUpperCaseFunction)
                .forEach(printConsumer);
    }
}